home *** CD-ROM | disk | FTP | other *** search
- /* VGA.H
- *
- * VGA hardware level routines for standard 320x200x256 mode
- *
- * Copyright 1995 Petteri Kangaslampi
- */
-
- #ifndef __VGA_H
- #define __VGA_H
-
-
- #ifdef __386__
-
- void vgaSetMode(int mode);
- #pragma aux vgaSetMode = \
- "xor ah,ah" \
- "int 10h" \
- parm [eax] \
- modify exact [eax];
-
- void vgaClearScreen(uchar *buffer);
- #pragma aux vgaClearScreen = \
- "mov ecx,16000" \
- "cld" \
- "xor eax,eax" \
- "rep stosd" \
- parm [edi] \
- modify exact [eax ecx edi];
-
- void vgaCopyScreen(uchar *buffer, uchar *dest);
- #pragma aux vgaCopyScreen = \
- "mov ecx,16000" \
- "cld" \
- "rep movsd" \
- parm [esi] [edi] \
- modify exact [ecx esi edi];
-
- void vgaPutPixel(uchar *buffer, int x, int y, int color);
- #pragma aux vgaPutPixel = \
- "cmp eax,319" \
- "ja clip" \
- "cmp ebx,199" \
- "ja clip" \
- "imul ebx,320" \
- "add ebx,eax" \
- "mov [edi+ebx],cl" \
- "clip:" \
- parm [edi] [eax] [ebx] [ecx] \
- modify exact [ebx];
-
- void vgaWaitVR(void);
- #pragma aux vgaWaitVR = \
- "mov dx,03DAh" \
- "vr:" \
- "in al,dx" \
- "test al,8" \
- "jz vr" \
- modify exact [eax edx];
-
- void vgaWaitNoVR(void);
- #pragma aux vgaWaitNoVR = \
- "mov dx,03DAh" \
- "nvr:" \
- "in al,dx" \
- "test al,8" \
- "jnz nvr" \
- modify exact [eax edx];
-
- void vgaWaitDE(void);
- #pragma aux vgaWaitDE = \
- "mov dx,03DAh" \
- "de:" \
- "in al,dx" \
- "test al,1" \
- "jnz de" \
- modify exact [eax edx];
-
- void vgaSetBorder(int color);
- #pragma aux vgaSetBorder = \
- "mov dx,03DAh" \
- "in al,dx" \
- "mov dx,03C0h" \
- "mov al,31h" \
- "out dx,al" \
- "mov al,bl" \
- "out dx,al" \
- parm [ebx] \
- modify exact [eax edx];
-
- void vgaSetRGB(int color, int r, int g, int b);
- #pragma aux vgaSetRGB = \
- "mov dx,03C8h" \
- "out dx,al" \
- "inc dx" \
- "mov al,bl" \
- "out dx,al" \
- "mov al,cl" \
- "out dx,al" \
- "mov eax,esi" \
- "out dx,al" \
- parm [eax] [ebx] [ecx] [esi] \
- modify exact [eax edx];
-
-
- #else
-
- void vgaSetMode(int mode);
- #pragma aux vgaSetMode = \
- "xor ah,ah" \
- "int 10h" \
- parm [ax] \
- modify exact [ax];
-
- void vgaWaitVR(void);
- #pragma aux vgaWaitVR = \
- "mov dx,03DAh" \
- "vr:" \
- "in al,dx" \
- "test al,8" \
- "jz vr" \
- modify exact [ax dx];
-
- void vgaWaitNoVR(void);
- #pragma aux vgaWaitNoVR = \
- "mov dx,03DAh" \
- "nvr:" \
- "in al,dx" \
- "test al,8" \
- "jnz nvr" \
- modify exact [ax dx];
-
- void vgaWaitDE(void);
- #pragma aux vgaWaitDE = \
- "mov dx,03DAh" \
- "de:" \
- "in al,dx" \
- "test al,1" \
- "jnz de" \
- modify exact [ax dx];
-
- void vgaSetBorder(int color);
- #pragma aux vgaSetBorder = \
- "mov dx,03DAh" \
- "in al,dx" \
- "mov dx,03C0h" \
- "mov al,31h" \
- "out dx,al" \
- "mov al,bl" \
- "out dx,al" \
- parm [bx] \
- modify exact [ax dx];
-
- void vgaSetRGB(int color, int r, int g, int b);
- #pragma aux vgaSetRGB = \
- "mov dx,03C8h" \
- "out dx,al" \
- "inc dx" \
- "mov al,bl" \
- "out dx,al" \
- "mov al,cl" \
- "out dx,al" \
- "mov ax,si" \
- "out dx,al" \
- parm [ax] [bx] [cx] [si] \
- modify exact [ax dx];
- #endif
-
- #endif
-